import request from '@/utils/request'

/**
 * 统计报表API接口
 * 提供运动会管理系统的各种统计数据和报表功能
 */

// ==================== 报名统计功能 ====================

/**
 * 获取报名统计概览
 * @returns {Promise} 报名统计概览数据
 */
export function getEnrollmentOverview() {
  return request({
    url: '/api/statistics/enrollments/overview',
    method: 'get'
  })
}

/**
 * 获取报名趋势数据
 * @param {Object} params - 查询参数
 * @param {string} params.startDate - 开始日期
 * @param {string} params.endDate - 结束日期
 * @param {string} params.groupBy - 分组方式(day/week/month)
 * @returns {Promise} 报名趋势数据
 */
export function getEnrollmentTrend(params) {
  return request({
    url: '/api/statistics/enrollments/trend',
    method: 'get',
    params
  })
}

/**
 * 获取按项目分组的报名统计
 * @param {Object} params - 查询参数
 * @param {string} params.projectType - 项目类型(个人/团体)
 * @returns {Promise} 项目报名统计数据
 */
export function getEnrollmentByProject(params) {
  return request({
    url: '/api/statistics/enrollments/by-project',
    method: 'get',
    params
  })
}

/**
 * 获取按学院/班级分组的报名统计
 * @param {Object} params - 查询参数
 * @param {string} params.groupType - 分组类型(college/class)
 * @returns {Promise} 学院/班级报名统计数据
 */
export function getEnrollmentByGroup(params) {
  return request({
    url: '/api/statistics/enrollments/by-group',
    method: 'get',
    params
  })
}

// ==================== 成绩统计功能 ====================

/**
 * 获取成绩统计概览
 * @returns {Promise} 成绩统计概览数据
 */
export function getScoreOverview() {
  return request({
    url: '/api/statistics/scores/overview',
    method: 'get'
  })
}

/**
 * 获取项目成绩排名
 * @param {number} projectId - 项目ID
 * @param {Object} params - 查询参数
 * @param {string} params.rankType - 排名类型(time/distance/score)
 * @returns {Promise} 项目成绩排名数据
 */
export function getProjectRanking(projectId, params) {
  return request({
    url: `/api/statistics/scores/ranking/${projectId}`,
    method: 'get',
    params
  })
}

/**
 * 获取破纪录统计
 * @returns {Promise} 破纪录统计数据
 */
export function getRecordBreakingStats() {
  return request({
    url: '/api/statistics/scores/record-breaking',
    method: 'get'
  })
}

/**
 * 获取成绩分布统计
 * @param {number} projectId - 项目ID
 * @returns {Promise} 成绩分布统计数据
 */
export function getScoreDistribution(projectId) {
  return request({
    url: `/api/statistics/scores/distribution/${projectId}`,
    method: 'get'
  })
}

// ==================== 项目统计功能 ====================

/**
 * 获取项目统计概览
 * @returns {Promise} 项目统计概览数据
 */
export function getProjectOverview() {
  return request({
    url: '/api/statistics/projects/overview',
    method: 'get'
  })
}

/**
 * 获取项目类型分布统计
 * @returns {Promise} 项目类型分布数据
 */
export function getProjectTypeDistribution() {
  return request({
    url: '/api/statistics/projects/type-distribution',
    method: 'get'
  })
}

/**
 * 获取项目热度统计
 * @param {Object} params - 查询参数
 * @param {string} params.orderBy - 排序方式(enrollmentCount/popularity)
 * @param {number} params.limit - 返回数量限制
 * @returns {Promise} 项目热度统计数据
 */
export function getProjectPopularity(params) {
  return request({
    url: '/api/statistics/projects/popularity',
    method: 'get',
    params
  })
}

// ==================== 用户统计功能 ====================

/**
 * 获取用户统计概览
 * @returns {Promise} 用户统计概览数据
 */
export function getUserOverview() {
  return request({
    url: '/api/statistics/users/overview',
    method: 'get'
  })
}

/**
 * 获取用户角色分布统计
 * @returns {Promise} 用户角色分布数据
 */
export function getUserRoleDistribution() {
  return request({
    url: '/api/statistics/users/role-distribution',
    method: 'get'
  })
}

/**
 * 获取用户活跃度统计
 * @param {Object} params - 查询参数
 * @param {string} params.timeRange - 时间范围(7days/30days/90days)
 * @returns {Promise} 用户活跃度统计数据
 */
export function getUserActivityStats(params) {
  return request({
    url: '/api/statistics/users/activity',
    method: 'get',
    params
  })
}

// ==================== 志愿者统计功能 ====================

/**
 * 获取志愿者统计概览
 * @returns {Promise} 志愿者统计概览数据
 */
export function getVolunteerOverview() {
  return request({
    url: '/api/statistics/volunteers/overview',
    method: 'get'
  })
}

/**
 * 获取志愿者工作时长统计
 * @param {Object} params - 查询参数
 * @param {string} params.groupBy - 分组方式(day/week/month)
 * @returns {Promise} 志愿者工作时长统计数据
 */
export function getVolunteerWorkHours(params) {
  return request({
    url: '/api/statistics/volunteers/work-hours',
    method: 'get',
    params
  })
}

/**
 * 获取志愿者任务类型分布
 * @returns {Promise} 志愿者任务类型分布数据
 */
export function getVolunteerTaskDistribution() {
  return request({
    url: '/api/statistics/volunteers/task-distribution',
    method: 'get'
  })
}

// ==================== 裁判统计功能 ====================

/**
 * 获取裁判统计概览
 * @returns {Promise} 裁判统计概览数据
 */
export function getRefereeOverview() {
  return request({
    url: '/api/statistics/referees/overview',
    method: 'get'
  })
}

/**
 * 获取裁判工作量统计
 * @param {Object} params - 查询参数
 * @param {string} params.timeRange - 时间范围
 * @returns {Promise} 裁判工作量统计数据
 */
export function getRefereeWorkload(params) {
  return request({
    url: '/api/statistics/referees/workload',
    method: 'get',
    params
  })
}

/**
 * 获取裁判评分分布统计
 * @param {number} refereeId - 裁判ID
 * @returns {Promise} 裁判评分分布数据
 */
export function getRefereeScoreDistribution(refereeId) {
  return request({
    url: `/api/statistics/referees/score-distribution/${refereeId}`,
    method: 'get'
  })
}

// ==================== 奖牌统计功能 ====================

/**
 * 获取奖牌统计概览
 * @returns {Promise} 奖牌统计概览数据
 */
export function getMedalOverview() {
  return request({
    url: '/api/statistics/medals/overview',
    method: 'get'
  })
}

/**
 * 获取按学院/班级分组的奖牌统计
 * @param {Object} params - 查询参数
 * @param {string} params.groupType - 分组类型(college/class)
 * @returns {Promise} 学院/班级奖牌统计数据
 */
export function getMedalByGroup(params) {
  return request({
    url: '/api/statistics/medals/by-group',
    method: 'get',
    params
  })
}

/**
 * 获取奖牌榜排名
 * @param {Object} params - 查询参数
 * @param {string} params.rankType - 排名类型(total/gold/silver/bronze)
 * @param {number} params.limit - 返回数量限制
 * @returns {Promise} 奖牌榜排名数据
 */
export function getMedalRanking(params) {
  return request({
    url: '/api/statistics/medals/ranking',
    method: 'get',
    params
  })
}

// ==================== 总体统计功能 ====================

/**
 * 获取运动会总体统计概览
 * @returns {Promise} 总体统计概览数据
 */
export function getOverallOverview() {
  return request({
    url: '/api/statistics/overall/overview',
    method: 'get'
  })
}

/**
 * 获取关键指标(KPI)统计数据
 * @returns {Promise} KPI统计数据
 */
export function getKPIStats() {
  return request({
    url: '/api/statistics/overall/kpi',
    method: 'get'
  })
}

/**
 * 获取实时统计数据
 * @returns {Promise} 实时统计数据
 */
export function getRealTimeStats() {
  return request({
    url: '/api/statistics/overall/realtime',
    method: 'get'
  })
}

// ==================== 报表生成和管理 ====================

/**
 * 生成统计报表
 * @param {Object} reportData - 报表配置数据
 * @param {string} reportData.reportType - 报表类型
 * @param {string} reportData.reportName - 报表名称
 * @param {Object} reportData.filters - 过滤条件
 * @param {Array} reportData.metrics - 统计指标
 * @returns {Promise} 报表生成结果
 */
export function generateReport(reportData) {
  return request({
    url: '/api/statistics/reports/generate',
    method: 'post',
    data: reportData
  })
}

/**
 * 分页查询报表列表
 * @param {number} currentPage - 当前页码
 * @param {number} pageSize - 每页大小
 * @param {Object} queryParams - 查询参数
 * @returns {Promise} 报表列表数据
 */
export function getReportPage(currentPage, pageSize, queryParams) {
  return request({
    url: `/api/statistics/reports/page/${currentPage}/${pageSize}`,
    method: 'get',
    params: queryParams
  })
}

/**
 * 获取报表详情
 * @param {string} reportId - 报表ID
 * @returns {Promise} 报表详情数据
 */
export function getReportById(reportId) {
  return request({
    url: `/api/statistics/reports/${reportId}`,
    method: 'get'
  })
}

/**
 * 删除报表
 * @param {string} reportId - 报表ID
 * @returns {Promise} 删除结果
 */
export function deleteReport(reportId) {
  return request({
    url: `/api/statistics/reports/${reportId}`,
    method: 'delete'
  })
}

/**
 * 更新报表
 * @param {string} reportId - 报表ID
 * @param {Object} updateData - 更新数据
 * @returns {Promise} 更新结果
 */
export function updateReport(reportId, updateData) {
  return request({
    url: `/api/statistics/reports/${reportId}`,
    method: 'put',
    data: updateData
  })
}

/**
 * 获取报表模板列表
 * @returns {Promise} 报表模板列表
 */
export function getReportTemplates() {
  return request({
    url: '/api/statistics/reports/templates',
    method: 'get'
  })
}

// ==================== 报表导出功能 ====================

/**
 * 导出统计报表
 * @param {string} reportId - 报表ID
 * @param {Object} exportParams - 导出参数
 * @param {string} exportParams.format - 导出格式(excel/pdf/csv)
 * @returns {Promise} 导出文件流
 */
export function exportReport(reportId, exportParams) {
  return request({
    url: `/api/statistics/reports/${reportId}/export`,
    method: 'get',
    params: exportParams,
    responseType: 'blob'
  })
}

/**
 * 导出报名统计数据
 * @param {Object} exportParams - 导出参数
 * @param {string} exportParams.format - 导出格式
 * @param {Object} exportParams.filters - 过滤条件
 * @returns {Promise} 导出文件流
 */
export function exportEnrollmentStats(exportParams) {
  return request({
    url: '/api/statistics/export/enrollments',
    method: 'get',
    params: exportParams,
    responseType: 'blob'
  })
}

/**
 * 导出成绩统计数据
 * @param {Object} exportParams - 导出参数
 * @param {string} exportParams.format - 导出格式
 * @param {Object} exportParams.filters - 过滤条件
 * @returns {Promise} 导出文件流
 */
export function exportScoreStats(exportParams) {
  return request({
    url: '/api/statistics/export/scores',
    method: 'get',
    params: exportParams,
    responseType: 'blob'
  })
}

/**
 * 导出奖牌统计数据
 * @param {Object} exportParams - 导出参数
 * @param {string} exportParams.format - 导出格式
 * @param {Object} exportParams.filters - 过滤条件
 * @returns {Promise} 导出文件流
 */
export function exportMedalStats(exportParams) {
  return request({
    url: '/api/statistics/export/medals',
    method: 'get',
    params: exportParams,
    responseType: 'blob'
  })
}

/**
 * 批量导出报表
 * @param {Array} reportIds - 报表ID列表
 * @param {Object} exportParams - 导出参数
 * @returns {Promise} 导出文件流
 */
export function batchExportReports(reportIds, exportParams) {
  return request({
    url: '/api/statistics/reports/batch-export',
    method: 'post',
    data: reportIds,
    params: exportParams,
    responseType: 'blob'
  })
}

// ==================== 图表数据获取 ====================

/**
 * 获取报名趋势图表数据
 * @param {Object} chartParams - 图表参数
 * @param {string} chartParams.timeRange - 时间范围
 * @param {string} chartParams.groupBy - 分组方式
 * @returns {Promise} 报名趋势图表数据
 */
export function getEnrollmentTrendChart(chartParams) {
  return request({
    url: '/api/statistics/charts/enrollment-trend',
    method: 'get',
    params: chartParams
  })
}

/**
 * 获取项目分布饼图数据
 * @param {Object} chartParams - 图表参数
 * @param {string} chartParams.groupBy - 分组方式(type/category)
 * @returns {Promise} 项目分布图表数据
 */
export function getProjectDistributionChart(chartParams) {
  return request({
    url: '/api/statistics/charts/project-distribution',
    method: 'get',
    params: chartParams
  })
}

/**
 * 获取成绩对比图表数据
 * @param {Object} chartParams - 图表参数
 * @param {Array} chartParams.projectIds - 项目ID列表
 * @param {string} chartParams.chartType - 图表类型(bar/line/radar)
 * @returns {Promise} 成绩对比图表数据
 */
export function getScoreComparisonChart(chartParams) {
  return request({
    url: '/api/statistics/charts/score-comparison',
    method: 'get',
    params: chartParams
  })
}

/**
 * 获取奖牌榜图表数据
 * @param {Object} chartParams - 图表参数
 * @param {string} chartParams.groupType - 分组类型
 * @param {number} chartParams.limit - 返回数量限制
 * @returns {Promise} 奖牌榜图表数据
 */
export function getMedalRankingChart(chartParams) {
  return request({
    url: '/api/statistics/charts/medal-ranking',
    method: 'get',
    params: chartParams
  })
}

/**
 * 获取用户活跃度图表数据
 * @param {Object} chartParams - 图表参数
 * @param {string} chartParams.timeRange - 时间范围
 * @param {string} chartParams.groupBy - 分组方式
 * @returns {Promise} 用户活跃度图表数据
 */
export function getUserActivityChart(chartParams) {
  return request({
    url: '/api/statistics/charts/user-activity',
    method: 'get',
    params: chartParams
  })
}

/**
 * 获取综合仪表板数据
 * @param {Object} dashboardParams - 仪表板参数
 * @param {Array} dashboardParams.widgets - 需要的组件列表
 * @param {Object} dashboardParams.filters - 过滤条件
 * @returns {Promise} 综合仪表板数据
 */
export function getDashboardData(dashboardParams) {
  return request({
    url: '/api/statistics/dashboard',
    method: 'get',
    params: dashboardParams
  })
}